package config

import (
	"fmt"
	"github.com/spf13/viper"
	"os"
	"strings"
	"tyjt-ferry/pkg/logger"
)

var (
	cfgDatabase    *viper.Viper
	cfgApplication *viper.Viper
	cfgJwt         *viper.Viper
	cfgSsl         *viper.Viper

	// 定义公共的变量，将配置内容存入其中，其他包中需要配置内容时，则应用改变量
	DataBaseConfig    *DatabaseConfig
	ApplicationConfig *Application
	JwtConfig         *Jwt
	SslConfig         *Ssl
)

// 加载配置方法
func ConfigSetup(path string) {
	viper.SetConfigFile(path)
	// 从文件中读取内容
	content, err := os.ReadFile(path)
	if err != nil {
		logger.Error(fmt.Sprintf("Read config file fail: %s", err.Error()))
	}
	// 将内容存入viper
	err = viper.ReadConfig(strings.NewReader(os.ExpandEnv(string(content))))
	if err != nil {
		logger.Fatal(fmt.Sprintf("Parse config file fail: %s", err.Error()))
	}

	// 数据库相关配置
	cfgDatabase = viper.Sub("settings.database")
	if cfgDatabase == nil {
		panic("config not find settings.database")
	}
	DataBaseConfig = NewDatabaseConfig(cfgDatabase)

	// 启动参数相关配置
	cfgApplication = viper.Sub("settings.application")
	if cfgApplication == nil {
		panic("config not find settings.application")
	}
	ApplicationConfig = NewApplication(cfgApplication)

	// jwt 初始化
	cfgJwt = viper.Sub("settings.jwt")
	if cfgJwt == nil {
		panic("config not find setttings.jwt")
	}
	JwtConfig = NewJwtConfig(cfgJwt)

	// ssl 配置
	cfgSsl = viper.Sub("settings.ssl")
	if cfgSsl == nil {
		panic("config not find settings.ssl")
	}
	SslConfig = NewSsl(cfgSsl)

	// 日志配置
	logger.InitLogger()

}
